package picol.model.asa.expr;

/**
 * Méthode de gestion de l'expression logique ET
 * pour des expressions de type entier
 * @author Aurélien Marcel - Julien Sanderson
 */
public class ASAExprANDInteger extends ASAExpr {

    private ASAExpr expr1;
    private ASAExpr expr2;

    public ASAExprANDInteger(ASAExpr _expr1, ASAExpr _expr2) {
        this.expr1 = _expr1;
        this.expr2 = _expr2;
    }

    public String getLabelExplorateur() {
        return "AND";
    }

    @Override
    public int evalue() {
        return expr1.evalue() & expr2.evalue();
    }

    @Override
    public ASAExpr simplifie() {

        ASAExpr se1 = expr1.simplifie();
        ASAExpr se2 = expr2.simplifie();

        if (se1 instanceof ASAExprEntier && se2 instanceof ASAExprEntier) {
            return new ASAExprEntier(se1.evalue() & se2.evalue());
        }

        if (se2.getValeur() == 0) {
            return null;
        }

        if (se1.getValeur() == 0) {
            return null;
        }

        if (se2.getValeur() == se1.getValeur()) {
            return se1;
        }

        return new ASAExprANDInteger(se1, se2);
    }
}
